package chapter07;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Java11_Collection_Map_01 {
    public static void main(String[] args) {
        // TODO 集合-HashMap
        HashMap<String,String> map = new HashMap<>();

        // 添加数据、修改数据
        map.put("a", "0");
        Object oldVal = map.put("a", "1");
        System.out.println(oldVal); // 0
        System.out.println(map);    // {a=1}
        System.out.println("-----------------------");

        // 添加数据：如果key存在则不添加
        map.putIfAbsent("b", "2");
        map.putIfAbsent("b", "3");
        System.out.println(map);    // {a=1, b=2}
        System.out.println("-----------------------");

        // 修改数据
        Object b = map.replace("b", "4");
        System.out.println(b); // 2
        System.out.println(map);    // {a=1, b=4}
        // 不存在的数据无法通过修改添加
        System.out.println(map.replace("c", "5"));    // null
        System.out.println(map);    // {a=1, b=4}
        System.out.println("-----------------------");

        // 清空数据
        map.clear();
        System.out.println(map);    // {}
        System.out.println("-----------------------");

        map.put("zhangsan","1");
        map.put("lisi","2");
        map.put("wangwu","3");

        // 查询数据获取map集合中所有的key
        Set set = map.keySet();
        System.out.println(set);    // [lisi, zhangsan, wangwu]
        // 根据所有key获取所有值
        for (Object k : set) {
            System.out.println(map.get(k));
        }

        System.out.println("-----------------------");

        // 查询数据获取map集合中所有value
        Collection values = map.values();
        for (Object v : values) {
            System.out.println(v);
        }
        System.out.println("-----------------------");

        // 判断是否包含key
        System.out.println(map.containsKey("zhangsan"));    // true
        // 判断是否包含值
        System.out.println(map.containsValue("1")); // true
        System.out.println("-----------------------");

        // 获取键值对对象
        Set<Map.Entry<String, String>> entries = map.entrySet();
        for (Map.Entry<String, String> entry : entries) {
//            System.out.println(entry);
            System.out.println(entry.getKey() + "=" + entry.getValue());
        }
        System.out.println("-----------------------");

        // 删除数据
        System.out.println(map);    // {lisi=2, zhangsan=1, wangwu=3}
//        map.remove("zhangsan");
        map.remove("zhangsan","1");
        System.out.println(map);    // {lisi=2, wangwu=3}
        System.out.println("-----------------------");

        System.out.println(map.size()); // 2
        System.out.println(map.isEmpty());  // false
        System.out.println(map.clone());    // {lisi=2, wangwu=3}

    }
}
